﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Controls;
using System.Resources;
using System.Data.Linq;
using System.Linq;
using CDStore3Tiers;
using log4net;
using log4net.Config;
using CustomDataGridViewColumn;

namespace CuaHangDiaNhac
{
	public partial class frmBaiHat : DevComponents.DotNetBar.Office2007Form
	{
        /// <summary>
        /// khởi tạo log4net
        /// </summary>
		log4net.ILog log = log4net.LogManager.GetLogger("Bài hát");
		private List<BaiHat> list;

        /// <summary>
        /// iểm tra quyền hạn
        /// </summary>
		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 101))
			{
				btnThemBH.Enabled = true;
				btnThem.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 102))
			{
				tsDelete.Enabled = true;
				btnXoa.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 103))
			{
				btnSave.Visible = true;
				tsSave.Enabled = true;
			}
		}
        /// <summary>
        /// khóa tất ca chức năng
        /// </summary>
		public void closeall()
		{
			tsDelete.Enabled = false;
			tsSave.Enabled = false;
			btnThemBH.Enabled = false;
			btnThem.Visible = false;
			btnSave.Visible = false;
			btnXoa.Visible = false;
		}



		//   StoreCDDataContext st = new StoreCDDataContext();

		XuLyBaiHat XLBH = new XuLyBaiHat();
		XuLyForm XL = new XuLyForm();
		//RatingStar star = new RatingStar();
		public frmBaiHat()
		{
			InitializeComponent();
			db.Connection.ConnectionString = getConfig.getConnection();
			list = db.BaiHats.ToList<BaiHat>();
		}
        /// <summary>
        /// khởi tạo lại danh sách bài hát
        /// </summary>
		private void ResetList()
		{

			list = db.BaiHats.ToList<BaiHat>();
		}
		StoreCDDataContext db = new StoreCDDataContext();
		DataGridViewTextBoxColumn coMaBH;
		DataGridViewTextBoxColumn coTenBH;
		DataGridViewTextBoxColumn coCaSi;
		DataGridViewTextBoxColumn coNhacSi;
		RatingStarColumn coHot;
		int PagingNumber = 0;
		int PagingSize = 25;

        /// <summary>
        /// load danh sách bài hát
        /// </summary>
		public void LoadDS()
		{
			dgv.Refresh();
			var baihat = db.BaiHat_SelectAll();
			BindingSource bh = new BindingSource();
			bh.DataSource = baihat.Skip(PagingNumber).Take(PagingSize);
			bindingNavigator1.BindingSource = bh;
			dgv.DataSource = bh;
			lbPageTotal.Text = (XLBH.TongSoTrang(PagingSize)).ToString();
			txtPage.Text = (XLBH.SoTrangHienTai(PagingNumber, PagingSize)).ToString();
		}
        /// <summary>
        /// load danh sách với headertext của datagridview
        /// </summary>
		public void loadDGV()
		{
			dgv.DataSource = null;

			coMaBH = new DataGridViewTextBoxColumn();
			coMaBH.DataPropertyName = "MaBH";
			coMaBH.HeaderText = "Mã bài hát";
			coMaBH.Name = "cMaBH";
			//coMaBH.Visible = false;
			dgv.Columns.Add(coMaBH);

			coTenBH = new DataGridViewTextBoxColumn();
			coTenBH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coTenBH.DataPropertyName = "TenBH";
			coTenBH.HeaderText = "Tên bài hát";
			coTenBH.Name = "cTenBH";
			dgv.Columns.Add(coTenBH);


			coCaSi = new DataGridViewTextBoxColumn();
			coCaSi.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coCaSi.DataPropertyName = "CaSi";
			coCaSi.HeaderText = "Ca sĩ";
			coCaSi.Name = "cCaSi";
			dgv.Columns.Add(coCaSi);


			coNhacSi = new DataGridViewTextBoxColumn();
			coNhacSi.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coNhacSi.DataPropertyName = "NhacSi";
			coNhacSi.HeaderText = "Nhạc sĩ";
			coNhacSi.Name = "cNhacSi";
			dgv.Columns.Add(coNhacSi);


			coHot = new RatingStarColumn();
			coHot.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coHot.DataPropertyName = "Hot";
			coHot.HeaderText = "Độ hot";
			coHot.Name = "cHot";
			dgv.Columns.Add(coHot);
			LoadDS();
		}
        /// <summary>
        /// Thêm bài hát
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThemBH_Click(object sender, EventArgs e)
        {
            BaiHat bh = new BaiHat();

            try
            {
                if (txtTenBH.Text.Trim() != "")
                {
                    string a = XLBH.TenBH(txtTenBH.Text);
                    if (a == "")
                    {
                        //bh.MaBH = Convert.ToInt32(txtMaBH.Text.ToString());
                        bh.TenBH = txtTenBH.Text.ToString().Trim();
                        bh.CaSi = txtCS.Text.ToString().Trim();
                        bh.NhacSi = txtNS.Text.ToString().Trim();
                        bh.Hot = RSHot.Rating;
                        db.BaiHats.InsertOnSubmit(bh);
                        db.SubmitChanges();
                        DevComponents.DotNetBar.MessageBoxEx.Show("Thêm bài hát thành công!" + a);
                        log.Info(frmLogin.id + ": đã thêm thành công bài hát " + bh.TenBH + " - " + bh.CaSi);
                    }
                    else
                    {
                        if (txtCS.Text.Trim() != "")
                        {
                            if (XLBH.CaSi(a, txtCS.Text) == 0)
                            {
                                bh.TenBH = txtTenBH.Text;
                                bh.CaSi = txtCS.Text;
                                bh.NhacSi = txtNS.Text;
                                bh.Hot = RSHot.Rating;
                                db.BaiHats.InsertOnSubmit(bh);
                                db.SubmitChanges();
                                DevComponents.DotNetBar.MessageBoxEx.Show("Thêm bài hát thành công!");
                                log.Info(frmLogin.id + ": đã thêm thành công bài hát " + bh.TenBH + " - " + bh.CaSi);
                            }
                            else
                            {
                                DevComponents.DotNetBar.MessageBoxEx.Show("Đã có bài hát này trong danh sách!");
                            }
                        }
                        else
                        {
                            DevComponents.DotNetBar.MessageBoxEx.Show("Vui lòng nhập ca sĩ thể hiện!");
                        }
                    }

                }
                else
                {
                    DevComponents.DotNetBar.MessageBoxEx.Show("Vui lòng nhập tên bài hát!");
                }
                //db.Transaction.Commit();
                //loadDGV();
                //timer1.Interval = 5000;
                //timer1.Start();


            }
            catch (Exception Ex)
            {
                //db.Transaction.Rollback();
                DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Xảy ra lỗi trong quá trình thêm tài khoản!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                log.Error(frmLogin.id + "Thêm bài hát mới thất bại");
            }


            loadDGV();
            ResetList();
        }
        /// <summary>
        /// load len form bài hát
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
		private void frmBaiHat_Load(object sender, EventArgs e)
		{
			closeall();
			lockLogin();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			log.Info(frmLogin.id + ": đã load lên form bài hát");
		}

		private void frmBaiHat_Activated(object sender, EventArgs e)
		{
			frmLogin fr = new frmLogin();
			// lockLogin(true, frmLogin.qh);

			loadDGV();
		}

        /// <summary>
        /// làm mới lại danh sách bài hát
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
		private void tsRefesh_Click(object sender, EventArgs e)
		{
			loadDGV();
			log.Info(frmLogin.id + " đã làm mới danh sách bài hát");
		}

        /// <summary>
        /// Xóa cac bài hát được chọn
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
		private void tsDelete_Click(object sender, EventArgs e)
		{
			BaiHat bh = new BaiHat();
			string listbh = "";
			try
			{
				if (dgv.SelectedRows.Count > 0)
				{
					foreach (DataGridViewRow r in dgv.SelectedRows)
					{
						string tenbh = r.Cells["cTenBH"].Value.ToString();
						string casi = r.Cells["cCaSi"].Value.ToString();
						listbh += "\n" + tenbh + " - " + casi;
					}
					DialogResult z = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc chắn muốn xóa (những) bài hát này ?" + listbh, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
					if (z == DialogResult.Yes)
					{
						foreach (DataGridViewRow r in dgv.SelectedRows)
						{
							int ma = Convert.ToInt32(r.Cells["cMaBH"].Value.ToString());
							string tenbh = r.Cells["cTenBH"].Value.ToString();
							string casi = r.Cells["cCaSi"].Value.ToString();
							var del = db.BaiHat_Delete(ma);
							db.SubmitChanges();
							log.Info(frmLogin.id + ": đã xóa bài hát " + tenbh + " - " + casi);
						}
						MessageBoxEx.Show("Xóa (các) bài hát đã chọn thành công");
					}
					loadDGV();
				}
			}
			catch
			{
				MessageBoxEx.Show("Xảy ra lỗi trong quá trình xóa bài hát!");
				log.Error(frmLogin.id + ": xóa bài hát thất bại");
			}
		}

		private void dgv_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;
			hit = dgv.HitTest(e.X, e.Y);

			//đối tượng cho biết thông tin hit trên datagridview
			if (e.Button == MouseButtons.Right)
			{ //bắt sự kiện chuột phải
				//tạo đối tượng HTi
				if (hit.Type == DataGridViewHitTestType.Cell)
				{//Kiểm tra xem đối tượng HTi có đúng là kiểu Cell không
					if (!((DataGridViewRow)(dgv.Rows[hit.RowIndex])).Selected)
					{//kiểm tra xem row tại vị trí chuột có đúng là chưa chọn
						dgv.ClearSelection();//xóa chọn tất cả trên datagrid
						((DataGridViewRow)dgv.Rows[hit.RowIndex]).Selected = true;//xác lập chọn cho row tại vị trí nhấn chuột                      
					}
				}
			}
			// ratingItem1.RatingValue = dgv.Rows[hit.RowIndex].Cells["cHot"].Value.ToString();


			//if (ratingItem1_RatingChanged(sender,e))
			//{
			//    string m = dgv.Rows[hit.RowIndex].Cells["cHot"].Value.ToString();
			//    DevComponents.DotNetBar.MessageBoxEx.Show(m);
			//}
			if (dgv.SelectedRows.Count > 1)
				lockContextmenu(false);
			else
			{
				lockContextmenu(true);
				//DevComponents.DotNetBar.MessageBoxEx.Show(e.X + "  " + e.Y);
			}
		}

		private void lockContextmenu(bool p)
		{
			//btnF5.Enabled = p;
			//btnSave.Enabled = p;
			//btnThem.Enabled = p;
			//btnXoa.Enabled = p;
			//btnDS.Enabled = p;
		}
        /// <summary>
        /// lưu các thay đổi trong danh sách bài hát
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
		private void tsSave_Click(object sender, EventArgs e)
		{
			try
			{
				XLBH.updateBaiHat(dgv);
				MessageBoxEx.Show("Lưu dữ liệu thành công!");
				log.Info(frmLogin.id + ": đã lưu các dữ liệu thay đổi");
			}
			catch (Exception)
			{
				MessageBoxEx.Show("Xảy ra lỗi trong quá trình lưu dữ liệu");
				log.Error(frmLogin.id + ": lưu dữ liệu thất bại");
			}
			loadDGV();
		}
        
		private void btnThem_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
			exThemBH.Expanded = true;
			log.Info(frmLogin.id + ": đã chọn chức năng thêm bài hát");
		}

		private void buttonItem4_Click(object sender, EventArgs e)
		{

		}

		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			// ResetList();
			XLBH = new XuLyBaiHat();
			XL.loadDGV(bindingNavigator1, dgv, XLBH.SearchBH(list, tsTimkiem.Text));
		}

		private void tsTimkiem_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Tìm kiếm theo mã bài hát, tên bài hát";
				XL.loadDGV(bindingNavigator1, dgv, null);
				loadDGV();
			}
		}

		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}
        /// <summary>
        /// Xem danh sách dĩa nhạc chứa bài hát
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
		private void buttonItem6_Click(object sender, EventArgs e)
		{
			if (dgv.SelectedRows.Count > 0)
			{
				if (dgv.SelectedRows.Count == 1)
				{
					foreach (DataGridViewRow r in dgv.SelectedRows)
					{
						int ma = Convert.ToInt32(r.Cells["cMaBH"].Value.ToString());
						string tenbh = r.Cells["cTenBH"].Value.ToString();
						string casi = r.Cells["cCaSi"].Value.ToString();
						frmDanhSachDiaNhac nds = new frmDanhSachDiaNhac(ma);
						nds.Getdata(ma);
						nds.Show();
						log.Info(frmLogin.id + ": đã chọn chức năng xem danh sách đĩa nhạc chứa bài hát " + tenbh + " - " + casi);
					}
				}
				else
				{
					MessageBoxEx.Show("Vui lòng chỉ chọn 1 bài hát để xem danh sách đĩa");
				}
			}
		}

		private void txtPage_KeyDown(object sender, KeyEventArgs e)
		{
			if (e.KeyCode == Keys.Enter)
			{
				bool isValid = txtPage.Text.All(char.IsDigit);
				if (isValid && txtPage.Text != "")
				{
					int textchange = Convert.ToInt32(txtPage.Text);
					int tongtrang = Convert.ToInt32(lbPageTotal.Text);
					if (textchange > 0 && textchange <= tongtrang)
					{
						PagingNumber = PagingSize * (textchange - 1);
						loadDGV();
					}
					else if (tongtrang == 1)
					{
						MessageBoxEx.Show("Danh sách này chỉ có 1 trang");
					}
					else
					{
						MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
					}
				}
				else
				{
					MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
				}
			}
		}

		private void txtPage_Leave(object sender, EventArgs e)
		{
			loadDGV();
		}

		private void lbDpre_Click(object sender, EventArgs e)
		{
			PagingNumber = 0;
			loadDGV();
		}

		private void lbPre_Click(object sender, EventArgs e)
		{
			int sotranghientai = Convert.ToInt32(txtPage.Text);
			int tongtrang = Convert.ToInt32(lbPageTotal.Text);
			if (sotranghientai > 1)
			{
				PagingNumber -= PagingSize;
				loadDGV();
			}
		}

		private void lbNext_Click(object sender, EventArgs e)
		{
			int sotranghientai = Convert.ToInt32(txtPage.Text);
			int tongtrang = Convert.ToInt32(lbPageTotal.Text);
			if (sotranghientai < tongtrang)
			{
				PagingNumber += PagingSize;
				loadDGV();
			}
		}

		private void lbDnext_Click(object sender, EventArgs e)
		{
			int tongtrang = Convert.ToInt32(lbPageTotal.Text);
			PagingNumber = PagingSize * (tongtrang - 1);
			loadDGV();
		}

        

	}
}
